package org.iamd.domain.business;

import org.iamd.util.IMsgKeys;
import org.iamd.util.Messenger;
import org.iamd.util.Messenger.ApplicationLocales;

/**
 * Базово изключение на системата.
 * 
 * @author И. Атанасов
 */
public class ApplicationException extends Exception {

	/** Сериен номер на класа. */
	private static final long serialVersionUID = 6387630459772428424L;

	/**
	 * Конструктор без пораждащо изключение и допълнителни параметри за съобщението.
	 * 
	 * @param key
	 *            ключът, под който се търси текста на изключението
	 */
	public ApplicationException(IMsgKeys key) {
		this(key, null, null);
	}

	/**
	 * Конструктор без пораждащо изключение.
	 * 
	 * @param key
	 *            ключът, под който се търси текста на изключението
	 * @param params
	 *            допълнителни параметри за текста на изключението
	 */
	public ApplicationException(IMsgKeys key, Object[] params) {
		this(key, params, null);
	}

	/**
	 * Конструиране на изключението. Формиране на съобщението за изключение.
	 * 
	 * @param key
	 *            ключът, под който се търси текста на изключението
	 * @param params
	 *            допълнителни параметри за текста на изключението
	 * @param cause
	 *            пораждащо изключение
	 */
	public ApplicationException(IMsgKeys key, Object[] params, Throwable cause) {
		super(Messenger.formMessage(key, params, ApplicationLocales.SYSTEM_LOCALE), cause);
	}

	/**
	 * Конструктор без допълнителни параметри за съобщението.
	 * 
	 * @param key
	 *            ключът, под който се търси текста на изключението
	 * @param cause
	 *            пораждащо изключение
	 */
	public ApplicationException(IMsgKeys key, Throwable cause) {
		this(key, null, cause);
	}

}